package rai.service.rep;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

import rai.UtilisateurInconnueException;

public class ListeRepertoiresImplement implements ListeRepertoires,
		Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	Map<String, Repertoire> lesRepertoires;

	public ListeRepertoiresImplement() {
		this.lesRepertoires = new TreeMap<String, Repertoire>();
	}

	public boolean creerRepertoire(String identifiant) {
		if (lesRepertoires.containsKey(identifiant))
			return false;
		lesRepertoires.put(identifiant, new RepertoireServeur());
		return true;
	}

	public String[] listerRepertoires() {
		Set<String> lesIdentifiants = lesRepertoires.keySet();
		return lesIdentifiants.toArray(new String[0]);
	}

	public Repertoire rechercherRepertoire(String identifiant) {
		return lesRepertoires.get(identifiant);
	}

	public boolean supprimerRepertoire(String identifiant) {
		return lesRepertoires.remove(identifiant) != null;

	}

	public void authentification(String user, String password)
			throws UtilisateurInconnueException {
		try {
			if (!User.valueOf(user).autentifier(password))
				throw new UtilisateurInconnueException(user);;
		} catch (IllegalArgumentException e) {
			throw new UtilisateurInconnueException(user);			
		}

	}

	public Boolean sauverListeRepertoires() {
		ObjectOutputStream sortie;
		try {
			sortie = new ObjectOutputStream(new FileOutputStream(
					"lesRepertoires.obj"));
			;

			sortie.writeObject(this);
			sortie.close();
			return true;
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}


	public void quitterListeRepertoires() {}

	
	/**
	 * Liste des utilisateurs
	 * 
	 * @author BUREAU
	 * 
	 */
	private enum User {
		ADMIN("adminRai"), FRED("fredMiage"), SAM("samMiage");
		
		String password;

		private User(String password) {
			this.password = password;
		}
		
		private boolean autentifier(String password){
			
			return this.password.equals(password);
		}
		
	}

}
